//
// Created by QU on 24-6-11.
//

#include <iostream>
#include <fstream>
#include <sstream>
#include <functional>
#include <utility>
#include <memory>
#include <vector>
#include <map>
#include <set>
#include <bitset>

using std::cout, std::cin, std::endl, std::unitbuf;

int main(int argc, char const *argv[]) {
    std::bitset<128> bitvec(~0ull);             // ~0ull unsigned long long ,  64个1

    std::string init_str("1111001010100111010101");
    std::bitset<32> bitvec2(init_str);
    std::bitset<32> bitvec3(init_str, 5, 4);         // 从5开始初始化4个bit

    std::cout << bitvec << std::endl;
    // bitvec 重载了 [] 运算符.
    std::cout << "bitvec[10]" << bitvec[10] << std::endl;

    // set()：将所有位或特定位设置为1。
    // reset()：将所有位或特定位重置为0。
    // flip()：翻转所有位或特定位。
    // count()：返回为1的位的数量。
    // size()：返回位集的大小（位数）。
    // test()：测试特定位是否为1。
    // any()：检查是否有任意一位为1。
    // none()：检查是否所有位都为0。
    // all()：检查是否所有位都为1。


    std::bitset<8> b("10101010");

    // 转换为字符串
    std::string str = b.to_string();
    std::cout << "String: " << str << std::endl;

    // 转换为无符号长整数
    unsigned long ul = b.to_ulong();
    std::cout << "Unsigned long: " << ul << std::endl;







    return 0;
}
